package com.design_patterns.prototype;

/**
 * @author: 李德才
 * @description:
 * @create: 2020-09-19 18:06
 **/
public class Main {
    public static void main(String[] args) throws CloneNotSupportedException {

        Person person = new Person();
        Address address = new Address();
        address.setCity("北京");
        person.setAddress(address);
        person.setId(1);
        Person clone = (Person) person.clone();
//        克隆出来的对象确实是独立的
        System.err.println(person == clone);

/**
 *  但是对象属性中的引用属性对象却没有完全克隆，
 *  仅仅是进行了一个浅克隆，
 *  这是因为 person.address 是一个引用，克隆也只是克隆了一个引用，两个对象的引用是相同的，所以属性对象也就是相同的
 *  想解决这个问题可以在 person 的克隆方法中克隆person对象，并手动克隆引用对象，再将新的引用对象重新赋值给新的person,达到深克隆的目的
 *  如在 com.design_patterns.prototype.Person  的 clone() 方法中
 */

        System.err.println(person.getAddress() == clone.getAddress());

    }
}
